﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using HotelSoft.HotelManagement_BUS;
using System.Collections;
using HotelSoft.HotelManagement_DTO;

namespace HotelSoft.HotelManagement_GUI
{
    public partial class frmQuanly_LOAIPHONG : Form
    {
        Double temp = 1;
        LoaiphongBUS busLoaiphong;
        public LoaiPhongDTO dtoLoaiphong;
        ArrayList dsLoaiphong;
        BindingSource bsData = null;
        public int iCo = 0;
        public bool bNhapDung = false;
        public bool kt = false;

        // Define the CS_DROPSHADOW constant
        private const int CS_DROPSHADOW = 0x00020000;

        // Override the CreateParams property
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ClassStyle |= CS_DROPSHADOW;
                return cp;
            }
        }

        public frmQuanly_LOAIPHONG()
        {
            InitializeComponent();
        }

        private void frmQuanly_LOAIPHONG_Load(object sender, EventArgs e)
        {
            timer1.Enabled = true;
            LayDanhSachLoaiPhong();
            if (Grid_Loaiphong.SelectedRows.Count == 0)
            {
                DieukienMo(true);
                Txt_Tenloai.Focus();
                kt = true;
            }
            DieukienMo(false);
        }

        public void LamMoi()
        {
            Txt_Tenloai.Text = "";
            Txt_Gia.Text = "";
            Txt_Trangbi.Text = "";
        }
        public void DieukienMo(bool Mo)
        {
            Txt_Tenloai.Enabled = Mo;
            Txt_Gia.Enabled = Mo;
            Txt_Trangbi.Enabled = Mo;
            Gru_LKL.Enabled = Mo;
            Gru_TXS.Enabled = !Mo;
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            this.Opacity = this.Opacity + 0.1;
            if (this.Opacity == temp)
                timer1.Enabled = false;
        }
        private void LayDanhSachLoaiPhong()
        {
            busLoaiphong = new LoaiphongBUS();
            dsLoaiphong = busLoaiphong.LayDanhSachLoaiPhong();
            XuatDanhSachLoaiPhong(dsLoaiphong);
            Grid_Loaiphong.CellContentClick += new DataGridViewCellEventHandler(Grid_Loaiphong_CellContentClick);
        }
        private void XuatDanhSachLoaiPhong(ArrayList dsLoaiphong)
        {
            Grid_Loaiphong.AutoGenerateColumns = false;

            this.bsData = new BindingSource(dsLoaiphong, "");
            Grid_Loaiphong.DataSource = bsData;
        }

        private void Grid_Loaiphong_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (Grid_Loaiphong.SelectedCells.Count > 0)
            {
                int row = Grid_Loaiphong.SelectedCells[0].RowIndex;
                Txt_Tenloai.Text = Grid_Loaiphong.Rows[row].Cells[1].Value.ToString();
                Txt_Gia.Text = Grid_Loaiphong.Rows[row].Cells[2].Value.ToString();
                Txt_Trangbi.Text = Grid_Loaiphong.Rows[row].Cells[3].Value.ToString();
            }
        }

        private bool KiemTraTenLoaiPhong()
        {
            LoaiPhongDTO dto = new LoaiPhongDTO();
            dto.TENLP = Txt_Tenloai.Text;
            return busLoaiphong.KTMA(dto);
        }
        private bool KiemTraDuLieuNhap()
        {
            if (Txt_Gia.Text == "" || Txt_Trangbi.Text == "")
            {
                MessageBox.Show("Bạn phải điền đầy đủ dữ liệu!");
                return false;
            }
            if (Txt_Tenloai.Text.Trim() == "" || float.Parse(Txt_Gia.Text) < 0 || Txt_Trangbi.Text.Trim() == "")
                
            {
                MessageBox.Show("Bạn xem lại dữ liệu nhập.");
                return false;
            }
            return true;
        }

        private void Btn_Them_Click(object sender, EventArgs e)
        {
            DieukienMo(true);
            Txt_Tenloai.Focus();
            LamMoi();
            kt = true;
        }

        private void Btn_Xoa_Click(object sender, EventArgs e)
        {
            ArrayList dsPhong;
            LayPhongDuocChon(out dsPhong);
            if (dsPhong.Count > 0)
            {
                DialogResult kq = MessageBox.Show("Bạn có thật sự muốn xóa không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (kq == DialogResult.Yes)
                {
                    XoaPhong();
                    iCo = 1;
                    LamMoi();
                }
            }
            else
            {
                MessageBox.Show("Xin hãy chọn một loại phòng muốn xóa");
            }
        }

        private void Btn_Sua_Click(object sender, EventArgs e)
        {
            if (Txt_Tenloai.Text!="" && Txt_Gia.Text!="")
            {
                DieukienMo(true);
                Txt_Tenloai.Enabled = false;
                kt = false;
            }
            else
            {
                MessageBox.Show("Hãy chọn loại phòng mà bạn muốn sửa");
            }
        }

        private void XoaNhanVienDuocChonKhoiDanhSach()
        {
            for (int i = 0; i < Grid_Loaiphong.Rows.Count; i++)
            {
                DataGridViewRow dong = Grid_Loaiphong.Rows[i];
                DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)dong.Cells[0];
                LoaiPhongDTO dtoPhongBiXoa = (LoaiPhongDTO)Grid_Loaiphong.Rows[cell.RowIndex].DataBoundItem;

                bool bChecked = (null != cell && null != cell.Value && true == (bool)cell.Value);
                if (bChecked)
                {
                    
                    this.bsData.RemoveAt(cell.RowIndex);
                    i--;
                }
            }
        }

        private int LayPhongDuocChon(out ArrayList dsPhong)
        {
            int iIndex = 0;
            dsPhong = new ArrayList();
            foreach (DataGridViewRow dong in this.Grid_Loaiphong.Rows)
            {
                DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)dong.Cells[0];
                bool bChecked = (null != cell && null != cell.Value && true == (bool)cell.Value);
                if (bChecked)
                {
                    dsPhong.Add(dong.DataBoundItem);
                    iIndex = dong.Index;
                }
            }

            return iIndex;
        }

        private void XoaPhong()
        {
            ArrayList dsPhong;
            LayPhongDuocChon(out dsPhong);
            if (dsPhong.Count > 0)
            {
                LoaiphongBUS busPhong = new LoaiphongBUS();
                busPhong.Xoa(dsPhong);
                XoaNhanVienDuocChonKhoiDanhSach();
            }
            else
            {
                MessageBox.Show("Bạn phải chọn một phòng!");
                return;
            }
        }

        private void Btn_Thoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void Btn_Luu_Click(object sender, EventArgs e)
        {
            try
            {
                if (kt == true)
                {
                    dtoLoaiphong = new LoaiPhongDTO();
                    bNhapDung = KiemTraDuLieuNhap();
                    if (bNhapDung)
                    {
                        if (KiemTraTenLoaiPhong())
                        {
                            MessageBox.Show("Loại phòng này đã tồn tại, xin nhập loại khác!");
                            Txt_Tenloai.Focus();
                            Txt_Tenloai.SelectAll();
                            return;
                        }

                        dtoLoaiphong.TENLP = Txt_Tenloai.Text.ToString();
                        dtoLoaiphong.GIA = float.Parse(Txt_Gia.Text.ToString());
                        dtoLoaiphong.TRANGBI = Txt_Trangbi.Text.ToString();
                    

                        if(!busLoaiphong.Them(dtoLoaiphong))
                        {
                            MessageBox.Show("Thất bại! Xin hãy kiểm tra lại");
                            return;
                        }

                        if (bsData.Count == 0)
                        {
                            ArrayList dsLoaiphong = new ArrayList();
                            dsLoaiphong.Add(dtoLoaiphong);
                            bsData = new BindingSource(dsLoaiphong, "");
                            this.Grid_Loaiphong.DataSource = bsData;
                        }
                        else
                        {
                            bsData.Add(dtoLoaiphong);
                        }
                   } 
                }
                else
                {
                    dtoLoaiphong = new LoaiPhongDTO();
                    bNhapDung = KiemTraDuLieuNhap();
                    if (bNhapDung)
                    {
                        dtoLoaiphong.TENLP = Txt_Tenloai.Text.ToString();
                        dtoLoaiphong.GIA = float.Parse(Txt_Gia.Text.ToString());
                        dtoLoaiphong.TRANGBI = Txt_Trangbi.Text.ToString();
                    }

                    if(!busLoaiphong.CapNhatThongTin(dtoLoaiphong))
                    {
                        MessageBox.Show("Thất bại! Xin hãy kiểm tra lại");
                        return;
                    }
                    ArrayList dsLoaiphong = new ArrayList();
                    dsLoaiphong.Add(dtoLoaiphong);
                    bsData = new BindingSource(dsLoaiphong, "");
                    this.Grid_Loaiphong.DataSource = bsData;
                }
            }
            catch
            {
                MessageBox.Show("Lỗi phải nhập đầy đủ thông tin.");
            }
            DieukienMo(false);
            LamMoi();
            Btn_Them.Focus();
        }

        private void Btn_Khongluu_Click(object sender, EventArgs e)
        {
            LamMoi();
            DieukienMo(false);
        }

        private void Btn_Tracuu_Click(object sender, EventArgs e)
        {
            LoaiPhongDTO dtoPhongCanTraCuu = new LoaiPhongDTO();
            if (Txt_Tenloai1.Text == "")
            {
               MessageBox.Show("Xin vui lòng nhập tên loại để thực hiện tra cứu");
                Txt_Tenloai1.Focus();
               return;
            }
            dtoPhongCanTraCuu.TENLP = Txt_Tenloai1.Text.ToString();
            ArrayList dsTraCuuDuoc = busLoaiphong.TraCuuPhong(dsLoaiphong, dtoPhongCanTraCuu);
            XuatDanhSachLoaiPhong(dsTraCuuDuoc);
        }

        private void Btn_Load_Click(object sender, EventArgs e)
        {
            LayDanhSachLoaiPhong();
            LamMoi();
        }

        private void Txt_Gia_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
                e.Handled = true;
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
